package com.yishan.string;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * String API
 *
 * @Author yishan
 * @Date 2021/9/24 0024 14:02
 * @Version 1.0
 */
public class StringDemo {

	public static void main(String[] args) {

		//stringBaseMethod();
		//compareStr();
		//changeType();
		//findStrIndex();
		//splitStr();
		concatStr();

	}

	private static void concatStr() {
		String str = "aaa";
		String str1 = "bbb";
		//拼接
		String concat = str.concat(str1);
		System.out.println(concat); //aaabbb
		//转大写
		String s = str.toUpperCase();
		System.out.println(s); //AAA
		//转小写
		String s1 = s.toLowerCase();
		System.out.println(s1); //aaa
	}

	private static void splitStr() {
		String str = "aaa,bb,b";
		String substring = str.substring(3);
		System.out.println(substring); //,bb,b
		String substring1 = str.substring(2, 4);
		System.out.println(substring1); //a,

		String[] split = str.split(",");
		System.out.println(Arrays.toString(split)); //[aaa, bb, b]
		//limit 指定返回数组的长度，如果没有指定此参数，全部都会被分割
		String[] split1 = str.split(",", 2);
		System.out.println(Arrays.toString(split1)); //[aaa, bb,b]
	}

	private static void findStrIndex() {

		String str = "abacdefgabcdefgaaa";

		int firstIndex = str.indexOf("a");
		System.out.println("a 第一次出现的位置：" + firstIndex); //a 第一次出现的位置：0
		int index = str.indexOf("a", 1);
		System.out.println("a 在索引1之后首次出现的位置: " + index); //a 在索引1之后首次出现的位置: 2
		int lastIndexOf = str.lastIndexOf("a");
		System.out.println("a 的最后一次出现的位置： " + lastIndexOf); //a 的最后一次出现的位置： 17
		int indexOf = str.lastIndexOf("a", 6);
		System.out.println("a 在索引为6之前首次出现的位置：" + indexOf); //a 在索引为6之前首次出现的位置：2
	}

	/**
	 * String类型转换
	 */
	private static void changeType() {
		//String类型转为其他类型
		System.out.println("Boolean.getBoolean(\"true\") = " + Boolean.getBoolean("true")); //Boolean.getBoolean("true") = false
		System.out.println("Integer.parseInt(\"20\") = " + Integer.parseInt("20")); //Integer.parseInt("20") = 20
		System.out.println("Long.parseLong(\"1024\") = " + Long.parseLong("1024")); //Long.parseLong("1024") = 1024
		System.out.println("Float.parseFloat(\"1.141\") = " + Float.parseFloat("1.141")); //Float.parseFloat("1.141") = 1.141
		System.out.println("Double.parseDouble(\"1.13141\") = " + Double.parseDouble("1.13141")); //Double.parseDouble("1.13141") = 1.13141
		System.out.println("Byte.parseByte(\"2\") = " + Byte.parseByte("2")); //Byte.parseByte("200") = 2
		System.out.println("\"lala\".charAt(0) = " + "lala".charAt(0)); //"lala".charAt(0) = l
		//其他类型转为String类型 valueOf()
		System.out.println("String.valueOf(Boolean.getBoolean(\"true\")) = " + String.valueOf(Boolean.getBoolean("true")));
	}

	/**
	 * 字符串比较
	 */
	private static void compareStr() {

		String str = "aaBbCCdddEEe";
		String str1 = "aabbccdddeee";

		System.out.println("=========字符串大小的比较==============");
		/**
		 * compareTo返回值为整型，不忽略大小写进行字符串大小的比较
		 * 		1.首先去比较第一个字符的ASCII是否相等，如果相等直接返回差值
		 * 		2.第一个相等的话就去比较第二个，直至最短的字符串比较完成
		 * 		3.比较完成之后就去比较字符串的长度，返回字符串长度的差值
		 */
		System.out.println("str.compareTo(str1) = " + str.compareTo(str1)); //str.compareTo(str1) = -32
		//忽略大小写进行字符串大小的比较
		System.out.println("str.compareToIgnoreCase(str1) = " + str.compareToIgnoreCase(str1)); //str.compareToIgnoreCase(str1) = 0

		System.out.println("=======字符串是否相等的比较=========");
		//不忽略大小写
		System.out.println("str.equals(str1) = " + str.equals(str1)); //str.equals(str1) = false
		System.out.println("str.equalsIgnoreCase(str1) = " + str.equalsIgnoreCase(str1)); //str.equalsIgnoreCase(str1) = true
	}

	/**
	 * 字符串基本操作方法
	 */
	private static void stringBaseMethod() {

		String str = "测试数据，String API 相关方法的使用！";

		//获取字符串长度
		System.out.println("str.length() = " + str.length());   //str.length() = 24
		//获取字符串中的第i个字符
		System.out.println("str.charAt(0) = " + str.charAt(0)); //str.charAt(0) = 测
		char[] chars = new char[10];
		str.getChars(0, 4, chars, 2);
		System.out.println(Arrays.toString(chars)); //[ ,  , 测, 试, 数, 据,  ,  ,  ,  ]
	}

}
